package net.zjitc.summary.user;

import java.io.*;
import java.util.ArrayList;

/**
 * @Author admin
 * @Date 2019/4/16 14:11
 *     工具类的具体实现类：用文件方式
 *     字节流：一般用操作图片或视频
 *     基本字节输入输出流 FileInputStream/FileOutputStream
 *     字节缓冲流 BufferedInputStream/BufferedOutputStream
 *     效率最高的是：用字节缓冲流一次读写一个字节数组
 *                  字符流，一般用来操作文本
 *    基本字符流：FileReader/FileWriter
 *    效率最高的是用字符缓冲流一次读写一行文本
 *    若出现乱码（编码问题），则需要用到转换流：InputStreamReader/OutputStreamWrite
 */
public class UserDaoIO implements UserDao {

    @Override
    public void register(User user) {
        /*把user对象写入文件：
         * 用户名和密码、email之间的分隔符
         * 一个用户放一行
         * 不考虑用户名是否重复
         * 使用字符缓冲流一次读写一行文本，默认使用utf-8编码，所以不用转换流  */
        Writer out = null;
        BufferedWriter bw = null;
        try {
            out = new FileWriter("user.txt", true);
            bw = new BufferedWriter(out);
            String s = user.getName() + "-" + user.getPassword() + '-' + user.getEmail();
            bw.write(s);
            bw.newLine();
            bw.flush();
            System.out.println("注册成功！");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bw != null) {
                    bw.close();
                }
                if (out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    @Override
    public User login(String name, String password) {
        /*循环读取文件中所有行
         *  一行文本读取出来后，分割好，封装到use对象
         *  比较用户名和密码是否一致
         *  若一致，封装成user对象，并返回
         *  */
        Reader in = null;
        BufferedReader br = null;
        try {
            in = new FileReader("user.txt");
            br = new BufferedReader(in);
            String line;
            while ((line = br.readLine()) != null) {
                String[] s = line.split("-");
                if (s[0].equals(name) && s[1].equals(password)) {
                    User user = new User(s[0], s[1], s[2]);
                    return user;
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        return null;
    }

    @Override
    public void selectAll() {
        Reader in = null;
        BufferedReader br = null;
        try {
            in = new FileReader("user.txt");
            br = new BufferedReader(in);
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);

            }


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void delete(String name) {
        /*
         *  1.文件内容读取出来，保存到集合中
         *  2.判断集合中是否存在用户为name的对象
         *  3.若不存在，提示不存在
         *  4.若存在，将集合中该对象删除
         *  5.把集合的内容重新写入文件
         * */
        BufferedReader br = null;
        BufferedWriter bw=null;
        ArrayList<User> list = new ArrayList<User>();
        try {
            br = new BufferedReader(new FileReader("user.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                String[] s = line.split("-");
                User user=new User(s[0],s[1],s[2]);
                list.add(user);
                }
            /*2.判断是否存在*/
            boolean flag=false;
            for (int i=0;i<list.size();i++){
                if (list.get(i).getName().equals(name)){
                 /* 1. 存在：1.设置flag为true
                             2.删除集合中的该对象文件
                             3.把心的集合内容写入文件
                 * */

                flag=true;
                User u=list.get(i);
                list.remove(u);
                //把集合中的内容重新写入文件
                bw=new BufferedWriter(new FileWriter("user.txt"));
                for (int j=0;j<list.size();j++){
                    User user=list.get(i);
                    String s=user.getName()+" - "+user.getPassword()+"  -  "+user.getEmail();
                    bw.write(s);
                    bw.newLine();
                }
                bw.flush();
                    System.out.println("删除成功！");
                break;
            }
                if (!flag){
                    System.out.println("要删除的用户不存在");
                }
            }
            } catch(Exception e){
                e.printStackTrace();
            }
        }

    }
